/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package atm;

/**
 *
 * @author etenorio
 */
public class ServicioBancario {
  private String nombreBanco;
  private Cuenta[] cuentas;
  public static int MAX = 50;

  public ServicioBancario() throws Exception{
    cuentas = new Cuenta[MAX];
    /**
     * Usuario de ejemplo
     */
    Usuario usuario = new Usuario("1", "Elohim", "123456", "28/10/1984");
    /**
     * Cuenta de ejemplo
     */
    cuentas[0] = new Cuenta("123", "456", usuario);
    cuentas[0].setSaldo(9000);
    cuentas[1] = new Cuenta("1234","1234",new Usuario("2","Jose","123456","05/02/1994"));
    cuentas[1].setSaldo(10000);
  }

  public String getNombreBanco() {
    return nombreBanco;

  }

  public Cuenta[] getCuentas() {
    return cuentas;
  }

  public void setCuentas(Cuenta[] cuentas) {
    this.cuentas = cuentas;
  }


  public void setNombreBanco(String nombreBanco) {
    this.nombreBanco = nombreBanco;
  }
  
  public Respuesta consultar(Consulta c){
    Respuesta respuesta = new Respuesta();
    Cuenta cuenta = validarCuenta(c);
    if (cuenta!=null){
      respuesta.setAceptada(true);
      respuesta.setMensaje("Operacion correcta");
      respuesta.setSaldo(cuenta.getSaldo());
      return respuesta;
    }
    else{
      respuesta.setMensaje("Clave incorrecta");
      return respuesta;
    }
  }
  public Respuesta retirar(Retiro r){
    Respuesta respuesta = new Respuesta();
    Cuenta cuenta = validarCuenta(r);
    if (cuenta!=null){
      /**
       * Valido numeros de control
       */
      String cedula = cuenta.getUsuario().getCedula();
      String control = (r.getPrimeros()?cedula.substring(0,2):cedula.substring(cedula.length()-2));
      if (!control.equals(r.getControl())){
        respuesta.setMensaje("Operacion cancelada");
        return respuesta;
      }
      /**
       * Valido el saldo
       */
      if (r.getMonto()>cuenta.getSaldo()){
        respuesta.setMensaje("Saldo insuficiente");
        return respuesta;
      }
      cuenta.setSaldo(cuenta.getSaldo()-r.getMonto());
      respuesta.setAceptada(true);
      respuesta.setMensaje("Operacion Correcta");
      respuesta.setSaldo(cuenta.getSaldo());
      return respuesta;
    }
    else
      return respuesta;
  }
  
  public Respuesta depositar (Retiro d){
      Respuesta respuesta = new Respuesta();
      Cuenta cuenta = validarCuenta(d);
      
      if (cuenta!=null){
        String cedula = cuenta.getUsuario().getCedula();
        String control = (d.getPrimeros()?cedula.substring(0,2):cedula.substring(cedula.length()-2));
        if (!control.equals(d.getControl())){
          respuesta.setMensaje("Operacion cancelada");
          return respuesta;
        } 
        
        cuenta.setSaldo(cuenta.getSaldo()+d.getMonto());
        respuesta.setAceptada(true);
        respuesta.setMensaje("Operacion Correcta");
        respuesta.setSaldo(cuenta.getSaldo());
        return respuesta;         
      }     
      return respuesta;
  }
  
  public Respuesta cambioClave (CambioClave cb){
      Respuesta respuesta = new Respuesta();
      Cuenta cuenta = validarCuenta(cb);    
      
      if (cuenta!=null){
        String cedula = cuenta.getUsuario().getCedula();
        String control = (cb.getPrimeros()?cedula.substring(0,2):cedula.substring(cedula.length()-2));
        if (!control.equals(cb.getControl())){
          respuesta.setMensaje("Operacion cancelada");
          return respuesta;
        }
        
        cuenta.setClave(cb.getNuevaClave());
        respuesta.setAceptada(true);
        respuesta.setMensaje("Operacion Correcta");        
        return respuesta;
      }
      return respuesta;
  }
  
  private Cuenta validarCuenta(Operacion o){
    for(Cuenta cuenta :cuentas)
      if (cuenta!=null)
      if (cuenta.getCuenta().equals(o.getCuenta()) && cuenta.getClave().equals(o.getClave()))
        return(cuenta);
    return null;
  }


}
